<?php

// TTTTTTTTTTTTTTTTTTTTTTT                  MMMMMMMM               MMMMMMMM                                CCCCCCCCCCCCMMMMMMMM               MMMMMMMM  SSSSSSSSSSSSSSS 
// T:::::::::::::::::::::T                  M:::::::M             M:::::::M                             CCC::::::::::::M:::::::M             M:::::::MSS:::::::::::::::S
// T:::::::::::::::::::::T                  M::::::::M           M::::::::M                           CC:::::::::::::::M::::::::M           M::::::::S:::::SSSSSS::::::S
// T:::::TT:::::::TT:::::T                  M:::::::::M         M:::::::::M                          C:::::CCCCCCCC::::M:::::::::M         M:::::::::S:::::S     SSSSSSS
// TTTTTT  T:::::T  TTTTTppppp   ppppppppp  M::::::::::M       M::::::::::M   eeeeeeeeeeee          C:::::C       CCCCCM::::::::::M       M::::::::::S:::::S            
//         T:::::T       p::::ppp:::::::::p M:::::::::::M     M:::::::::::M ee::::::::::::ee       C:::::C             M:::::::::::M     M:::::::::::S:::::S            
//         T:::::T       p:::::::::::::::::pM:::::::M::::M   M::::M:::::::Me::::::eeeee:::::ee     C:::::C             M:::::::M::::M   M::::M:::::::MS::::SSSS         
//         T:::::T       pp::::::ppppp::::::M::::::M M::::M M::::M M::::::e::::::e     e:::::e     C:::::C             M::::::M M::::M M::::M M::::::M SS::::::SSSSS    
//         T:::::T        p:::::p     p:::::M::::::M  M::::M::::M  M::::::e:::::::eeeee::::::e     C:::::C             M::::::M  M::::M::::M  M::::::M   SSS::::::::SS  
//         T:::::T        p:::::p     p:::::M::::::M   M:::::::M   M::::::e:::::::::::::::::e      C:::::C             M::::::M   M:::::::M   M::::::M      SSSSSS::::S 
//         T:::::T        p:::::p     p:::::M::::::M    M:::::M    M::::::e::::::eeeeeeeeeee       C:::::C             M::::::M    M:::::M    M::::::M           S:::::S
//         T:::::T        p:::::p    p::::::M::::::M     MMMMM     M::::::e:::::::e                 C:::::C       CCCCCM::::::M     MMMMM     M::::::M           S:::::S
//       TT:::::::TT      p:::::ppppp:::::::M::::::M               M::::::e::::::::e                 C:::::CCCCCCCC::::M::::::M               M::::::SSSSSSS     S:::::S
//       T:::::::::T      p::::::::::::::::pM::::::M               M::::::Me::::::::eeeeeeee          CC:::::::::::::::M::::::M               M::::::S::::::SSSSSS:::::S
//       T:::::::::T      p::::::::::::::pp M::::::M               M::::::M ee:::::::::::::e            CCC::::::::::::M::::::M               M::::::S:::::::::::::::SS 
//       TTTTTTTTTTT      p::::::pppppppp   MMMMMMMM               MMMMMMMM   eeeeeeeeeeeeee               CCCCCCCCCCCCMMMMMMMM               MMMMMMMMSSSSSSSSSSSSSSS   
//                        p:::::p                                                                                                                                       
//                        p:::::p                                                                                                                                       
//                       p:::::::p                                                                                                                                      
//                       p:::::::p                                                                                                                                      
//                       p:::::::p                                                                                                                                      
//                       ppppppppp                                                                                                                                      

//  _____      __  __         ____ __  __ ____  
// |_   __ __ |  \/  | ___   / ___|  \/  / ___|     | AUTHOR: Xiaohe
//   | || '_ \| |\/| |/ _ \ | |   | |\/| \___ \     | EMAIL: 496631085@qq.com
//   | || |_) | |  | |  __/ | |___| |  | |___) |    | WECHAT: he4966
//   |_|| .__/|_|  |_|\___|  \____|_|  |_|____/     | DATETIME: 2023/03/20
//      |_|                                         | TpMeCMS

declare(strict_types=1);

namespace ImiApp\ApiServer\Api\Controller\store;

use Imi\Db\Db;
use Imi\Server\Http\Route\Annotation\Action;
use Imi\Server\Http\Route\Annotation\Controller;
use Imi\Server\Http\Route\Annotation\Route;
use Psr\Http\Message\ResponseInterface;
use Imi\Aop\Annotation\Inject;
// use Phpben\Imi\Validate\Annotation\Validate;
use Phpben\Imi\Auth\Annotation\Auth;
use Imi\Cache\CacheManager as Cache;
use Imi\Config;
use ImiApp\ApiServer\Api\Controller\Tpmecms;

/**
 * 店铺申请
 * @Auth(name="token",nologin={"no"})
 * @Controller("/store.store_apply/")
 */
class StoreApply extends Tpmecms
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    /**
     * 申请店铺
     *
     * @param string $pid 邀请人id
     * @param int $exam_id 考试id
     * @param string $name 店铺名称
     * @param string $logo_image LOGO
     * @param string $sign 签名
     * @param string $banner_image banner图片
     * @param string $content 店铺内容
     * @param string $ltd_status 企业OR个人:1=个人,2=企业
     * @param string $remark 备注
     * @param string $contacts_name 联系人姓名
     * @param string $mobile 联系人手机号
     * @param string $addr 地址
     * @param string $declaration_id 自我声明id
     * @param string $sfz 身份证号
     * @param string $sfz1_image 身份证正面
     * @param string $sfz2_image 身份证反面
     * @param string $sfz3_image 手持身份证
     * @param string $sign_image 签名照
     * @param string $bbl_expire_time 营业执照到期日
     * @param string $work_time 营业时间
     * @param string $storebusinesstype_ids 营业类型
     * @param string $storebusinesstype_text 营业类型
     * @param string $goodscate_ids 可销售主分类
     * @param string $storetype_id 店铺类型
     * @param string $lat 纬度
     * @param string $lng 经度
     * @param string $bank_account_name 银行开户姓名
     * @param string $bank_account 银行账号
     * @param string $bank_branch_name 银行支行名称
     * @param string $bank_branch_number 银行支行行号
     * @param string $wechat_name 微信真实姓名
     * @param string $wechat_openid 微信分账openid
     * @param string $money_status 费用:1=平台提现,2=执行分账
     * @param string $unionid 开放平台id
     * @param string $ali_name 支付宝真实姓名
     * @param string $ali_account 支付宝账号
     * @param string $activation_code 激活码
     * @param string $ltd_name 企业名称
     * @param string $ltd_uscc 社会信用代码
     * @param string $ltd_contacts 公司法人
     * @param string $ltd_tel 法人手机号
     * @param string $paper_images 证件照
     * @param string $bbl_image 营业执照照片
     * @param string $qualification_images 资质照片
     * @param string $ltdtype_status 公司类型:individual=个体,ordinary=普通企业
     * @return void
     * @Action
     */
    public function apply_store($pid = null, $exam_id = null)
    {
        var_dump('apply_store pid', $pid);
        
        $param = $this->request->param();
        // 判断是否已经实名认证了
        $this->VerifyRealName();


        $param['test_status'] = 0; //考试状态:0=未知,1=免考,2=已考
        if ($pid) {
            //查询用户id
            $param['pid'] = $pid;
            $user = Db::name('user')->where('id', '=', $pid)->select()->get();
            if (!$user)
                return $this->error('没有该辅导员');


            $exam = Db::name('exam')->where('user_id', '=', $this->auth->user()->id)->where('scores', '>=', config('store_scores_pass'))->select()->get();
            if ($exam) {
                $param['test_status'] = '2'; //考试状态:0=未知,1=免考,2=已考
                $param['exam_scores'] = $exam['scores'];
                $param['exam_id'] = $exam['id'];
            }else{
                
                if ($user['set_id'] > 3) {
                    var_dump('set_id>3 考试状态',$exam);
                    $param['test_status'] = '1'; //考试状态:0=未知,1=免考,2=已考
                }   
            }

  
        } else {
            unset($param['pid']);
            //查询用户是否已经通过考试   
            $exam = Db::name('exam')->where('user_id', '=', $this->auth->user()->id)->where('scores', '>=', config('store_scores_pass'))->select()->get();
            if ($exam) {
                $param['test_status'] = '2'; //考试状态:0=未知,1=免考,2=已考
                $param['exam_scores'] = $exam['scores'];
                $param['exam_id'] = $exam['id'];
            }
        
        }



        // //pid 和 exam_id 必选其一
        // if ($pid) {
        //     //判断身份是否可以 免考

        //     $param['pid'] = $pid;

        //     $param['test_status'] = '1';
        //     $param['exam_scores'] = 0;
        //     //免考test_status` enum('0','1','2') DEFAULT '0' COMMENT '考试状态:0=未知,1=免考,2=已考',
        // } else {
        //     if (!$exam_id)
        //         return $this->error('请传入考试ID', null, CODE_请传入考试ID);

        //     $exam = Db::name('exam')->where('id', $exam_id)->where('user_id', $this->auth->user()->id)->select()->get();
        //     if (!$exam)
        //         return $this->error('考试未存在', null, CODE_考试不存在);
        //     if ($exam['scores'] < 10)
        //         return $this->error('考试未通过', null, CODE_考试未通过);

        //     $param['test_status'] = '2';
        //     $param['exam_scores'] = $exam['scores'];
        // }

        $data = $this->apply_storeSelf($param);
        $this->CreateStoreCaorder($data);
        return $this->success('等待审核');
        //店铺申请成功
        // Hook::listen("apply_store_successed", $this->auth,$this->request->param());
    }

    /**
     * 申请店铺
     *
     * @param array $param 参数
     * @return void
     */
    protected function apply_storeSelf($param)
    {
        $fields = [
            'qualification_images', 'money_status', 'name', 'logo_image', 'sign', 'banner_image', 'content', 'test_status', 'ltd_status', 'remark', 'contacts_name', 'mobile', 'addr', 'sfz', 'declaration_id', 'exam_scores', 'sfz1_image', 'sfz2_image', 'sfz3_image', 'sign_image', 'bbl_expire_time', 'work_time', 'storebusinesstype_ids', 'storebusinesstype_text', 'goodscate_ids', 'storetype_id', 'lat', 'lng', 'pid',
            'bank_account_name',  'bank_account',  'bank_branch_name',  'bank_branch_number',  'wechat_name',  'wechat_openid',  'ali_name',  'ali_account',  'activation_code',  'ltd_name',  'ltd_uscc',  'ltd_contacts',  'ltd_tel',  'paper_images',  'bbl_image', 'area_id', 'ltdtype_status',
            'unionid'
        ];
        $data = get_field_arr($param, $fields);

     

        $area = $this->GetAreaAllData($data['area_id']);
        $data = array_merge($data, $area);

        if($data['pid'])
        {
            $puser = Db::name('user')->where('id','=',$data['pid'])->find();
            $data['run_id'] = $puser['run_id'];
        }
        $data['user_id'] = $this->auth->user()->id;
        $data['register_ip'] = ip();
        $data['bbl_expire_time'] = strtotime($param['bbl_expire_time']);
        $data['createtime'] = time();
        $data['updatetime'] = time();
        if (!empty($data['ltd_tel']) && empty($data['mobile'])) {
            $data['mobile'] = $data['ltd_tel'];
        }

        //判断主营分类
        $this->JudgeGoodscateIds($data['ltd_status'], $data['goodscate_ids']);
        $data['goodscate_text'] = $this->getGoodscateText($data['goodscate_ids']);

        //1=个人,2=企业
        switch ($data['ltd_status']) {
            case '1':
                $data['set_id'] = 10;
                $data['now_filesize'] = 1024 * $this->GetStoreNetdiskFilesize($data['set_id']); //网盘容量大小初始化
                break;
            case '2':
                $data['set_id'] = 13;
                $data['now_filesize'] = 1024 * $this->GetStoreNetdiskFilesize($data['set_id']); //网盘容量大小初始化
                break;
            default:
                break;
        }

        $store = Db::name('store')->where('user_id', '=', $data['user_id'])->select()->get();
        if ($store) {
            if ($store['apply_status'] == '2')
                return $this->error('您已通过开店');
            Db::name('store')->where('id', '=', $store['id'])->update($data);
            $data['id'] = $store['id'];
        } else {
            $data['id'] = Db::name('store')->insert($data)->getLastInsertId();
        }
        var_dump('最后修改的字段数据',$data);

        return $data;

        // `name` varchar(30) NOT NULL DEFAULT '' COMMENT '店铺名称',
        // `logo_image` varchar(255) NOT NULL DEFAULT '' COMMENT 'LOGO',
        // `user_id` int(10) unsigned DEFAULT NULL COMMENT '用户id',
        // `sign` varchar(255) DEFAULT NULL COMMENT '签名',
        // `banner_image` varchar(255) DEFAULT NULL COMMENT 'banner图片',
        // `content` longblob COMMENT '店铺内容',
        // `test_status` enum('0','1','2') DEFAULT '0' COMMENT '考试状态:0=未知,1=免考,2=已考',
        // `ltd_status` enum('1','2') DEFAULT '1' COMMENT '企业OR个人:1=个人,2=企业',
        // `remark` varchar(255) DEFAULT NULL COMMENT '备注',
        // `contacts_name` varchar(255) DEFAULT NULL COMMENT '联系人姓名',
        // `mobile` varchar(11) NOT NULL COMMENT '联系人手机号',
        // `addr` varchar(255) DEFAULT NULL COMMENT '地址',
        // `sfz1_image` varchar(255) DEFAULT NULL COMMENT '身份证正面',
        // `sfz2_image` varchar(255) DEFAULT NULL COMMENT '身份证反面',
        // `sfz3_image` varchar(255) DEFAULT NULL COMMENT '手持身份证',
        // `sign_image` varchar(255) DEFAULT NULL COMMENT '签名照',
        // `bbl_expire_time` int(10) unsigned DEFAULT NULL COMMENT '营业执照到期日',
        // `work_time` varchar(255) DEFAULT NULL COMMENT '营业时间',
        // `storebusinesstype_ids` varchar(255) DEFAULT NULL COMMENT '营业类型',
        // `storebusinesstype_text` varchar(255) DEFAULT NULL COMMENT '营业类型',
        // `goodscate_ids` varchar(255) DEFAULT NULL COMMENT '可销售商品主分类',
        // `storetype_id` int(10) unsigned DEFAULT NULL COMMENT '店铺类型',
        // `lat` varchar(20) DEFAULT NULL COMMENT '纬度',
        // `lng` varchar(20) DEFAULT NULL COMMENT '经度',
        // `pid` int(10) unsigned DEFAULT NULL COMMENT '邀请人',


        // `package_id` int(10) unsigned DEFAULT NULL COMMENT '套餐编号',
        // `expire_time` int(10) unsigned NOT NULL COMMENT '过期时间',
        // `threshold` decimal(10,2) DEFAULT '0.00' COMMENT '阀值',



        // `qr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '店铺二维码',
        // `set_id` int(10) unsigned DEFAULT NULL COMMENT '店铺角色ID',
        // `now_filesize` int(10) unsigned DEFAULT '0' COMMENT '可用文件占用大小KB',
        // `filesize` int(10) unsigned DEFAULT '0' COMMENT '已用文件占用大小KB',
        // `good` int(10) unsigned DEFAULT '0' COMMENT '好评',
        // `comments` int(10) unsigned DEFAULT '0' COMMENT '评论数',
        // `bad` int(10) unsigned DEFAULT '0' COMMENT '差评',
        // `likes` int(10) unsigned DEFAULT '0' COMMENT '收藏数',
        // `admin_id` int(10) unsigned DEFAULT NULL,
    }

    /**
     * 创建店铺押金订单
     *
     * @param array $data 
     * @return void
     */
    protected function CreateStoreCaorder($data)
    {
        $in_data['store_id'] = $data['id'];
        $in_data['user_id'] = $this->auth->user()->id;
        $in_data['pay_status'] = '1'; //支付状态:1=待支付,2=已支付,3=已退款,4=已超时
        $res = Db::name('store_caorder')->whereEx($in_data)->select()->get();

        if (!$res) {
            $in_data['money'] = $this->GetStoreCaMoney($data['set_id']); //$data['ltd_status']
            $in_data['price'] = $in_data['money'];

            $in_data['order'] = $this->rand_order('Ca', 28);
            $in_data['time'] = time();
            $in_data['ps']  = '认证店铺';
            $in_data['get_status'] = '1'; //获取方式:1=购买,2=领取
            Db::name('store_caorder')->insert($in_data);
        }
    }
}
